require("./server");
// Modules to control application life and create native browser window
const { app, BrowserWindow, ipcMain, dialog } = require("electron");
const path = require("path");
const fs = require('fs');
let mainWindow;
function createWindow() {
  // Create the browser window.
  mainWindow = new BrowserWindow({
    webPreferences: {
      preload: path.join(__dirname, "preload.js"),
      webSecurity: false,
      allowRunningInsecureContent: false,
      enableRemoteModule: true, // 在RenderProcess使用RemoteModule
      contextIsolation: false,
      webgl: true, // 启用硬件加速
      hardwareAcceleration: true,
      //nodeIntegration: true,
    },
  });

  if (app.isPackaged) {
    console.log("Running in production");
    mainWindow.loadURL("http://localhost:5003");
  } else {
    console.log("Running in development");
    mainWindow.loadURL("http://localhost:8080");
  }
  //ipcMain.handle 方法表明主进程如何响应来自 HTML 页面上 按钮的点击事件。
  ipcMain.handle("dark-mode:toggle", () => {
    console.log("dark-mode:toggle");
  });

  ipcMain.handle("dark-mode:system", () => {
    console.log("dark-mode:system");
  });
}

// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.whenReady().then(() => {
  createWindow();
  setTimeout(() => {
    //直接使用windows窗口对象向渲染进程发送消息，使用延时是因为主进程加载完成 渲染进程还未加载
    mainWindow.webContents.send("hello_child", "哈喽子级！");
  }, 3000);
  app.on("activate", function () {
    // On macOS it's common to re-create a window in the app when the
    // dock icon is clicked and there are no other windows open.
    if (BrowserWindow.getAllWindows().length === 0) createWindow();
  });
});

// Quit when all windows are closed, except on macOS. There, it's common
// for applications and their menu bar to stay active until the user quits
// explicitly with Cmd + Q.
app.on("window-all-closed", function () {
  if (process.platform !== "darwin") app.quit();
});
ipcMain.on("export--file", (event, data) => {
  console.log("export--file", data);
  dialog
    .showSaveDialog(mainWindow.webContents, {
      modal: true,
      alwaysOnTop: true,
      title: "Export File",
      properties: ['openFile'],
      defaultPath: path.join(app.getPath("documents"), "exported-file.xlsx"),
      filters: [
        { name: "xlsx Files", extensions: ["xlsx"] },
        { name: "Text Files", extensions: ["txt"] },
        { name: "All Files", extensions: ["*"] },
      ],
    })
    .then((result) => {
      if (!result.canceled) {
        const filePath = result.filePath;
        // 将二进制数据转换为 Buffer
        const buffer = new Buffer.from(data, 'binary');
        console.log('Buffer type:', typeof buffer);
        console.log('Is buffer a Buffer:', Buffer.isBuffer(buffer));
        fs.writeFile(filePath, buffer, (err) => {
          if (err) {
            console.error("Failed to write file:", err);
          } else {
            console.log(`File saved at: ${filePath}`);
          }
        });
      }
    })
    .catch((err) => console.error("Error during save dialog:", err));
});

// In this file you can include the rest of your app's specific main process
// code. You can also put them in separate files and require them here.
